﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ComponentModel;
using PhoneAppSTS.StsService;
using System.Diagnostics;
using STS.Model;
using System.Collections.ObjectModel;

namespace PhoneAppSTS.Utils
{
    public class VisitUtils : INotifyPropertyChanged
    {
        private ObservableCollection<DataWizyty> datyWizyt;
        public ObservableCollection<DataWizyty> DatyWizyt
        {
            get
            {
                if (datyWizyt == null)
                {
                    datyWizyt = new ObservableCollection<DataWizyty>();
                }
                return datyWizyt;
            }
            set
            {
                datyWizyt = value;
                OnPropertyChanged("DatyWizyt");
            }
        }

        private Wizyta wizyta;
        public Wizyta Wizyta
        {
            get
            {
                if (wizyta == null)
                {
                    wizyta = new Wizyta();
                }
                return wizyta;
            }
            set
            {
                wizyta = value;
                OnPropertyChanged("Wizyta");
            }
        }

        private Wizyta nastepnaWizyta;
        public Wizyta NastepnaWizyta
        {
            get
            {
                if (nastepnaWizyta == null)
                {
                    nastepnaWizyta = new Wizyta();
                }
                return nastepnaWizyta;
            }
            set
            {
                nastepnaWizyta = value;
                OnPropertyChanged("NastepnaWizyta");
            }
        }

        private ObservableCollection<Wizyta> listaWizyt;
        public ObservableCollection<Wizyta> ListaWizyt
        {
            get
            {
                if (listaWizyt == null)
                {
                    listaWizyt = new ObservableCollection<Wizyta>();
                }
                return listaWizyt;
            }
            set
            {
                listaWizyt = value;
                OnPropertyChanged("ListaWizyt");
            }
        }

        public void DownloadWizyty(int idPacjenta)
        {
            Service1Client wizyty = new Service1Client();
            //ToDo - pobieranie z web service wizyt
            wizyty.GetWizytyCompleted += new EventHandler<GetWizytyCompletedEventArgs>(wizyty_GetWizytyCompleted);
            wizyty.GetWizytyAsync(idPacjenta);
        }

        void wizyty_GetWizytyCompleted(object sender, GetWizytyCompletedEventArgs e)
        {
            try
            {
                ObservableCollection<wizyta> wizyta = e.Result;
                ConvertToListOfWizyty(wizyta);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }

        private void ConvertToListOfWizyty(ObservableCollection<wizyta> wizyta)
        {
            try
            {
                ListaWizyt = new ObservableCollection<Wizyta>();
                //DatyWizyt = new ObservableCollection<DataWizyty>();
                foreach (var item in wizyta)
                {
                    if (item.data.Value < DateTime.Now)
                    {
                        ListaWizyt.Add(ConvertToWizyty(item));
                        ModelInstance.WizytaViewModel.AddWizyta(ConvertToWizyty(item));
                        DataWizyty dw = new DataWizyty((DateTime)item.data, item.id_wizyty);
                        DatyWizyt.Add(dw);
                    }
                    else
                    {
                        NastepnaWizyta = ConvertToWizyty(item);
                    }

                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }

        private Wizyta ConvertToWizyty(wizyta item)
        {
            Wizyta tmp = new Wizyta();
            tmp.Cisnienie = item.cisnienie;
            tmp.Data = (DateTime)item.data;
            tmp.IdWizyty = item.id_wizyty;
            tmp.IdLekarza = item.dane_lekarzy.ID_Pracownika;
            tmp.IdPacjenta = item.dane_pacjentow.id_pacjenta;
            tmp.Waga = item.waga == null ? 0.0 : (double)item.waga;
            return tmp;
        }




        #region Property Changed
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string p)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(p));
            }
        }
        #endregion
    }
}
